<?php
/*
Plugin Name: Custom Field GUI Utility Extender
Plugin URI: http://webcake.no003.info/
Description: カスタムフィールドを使いやすくするプラグイン<a href="http://www.tinybeans.net/blog/download/wp-plugin/cfg-utility-3.html">「Custom Field GUI Utility」</a>の設定ファイル「conf.ini」の編集を管理画面から行えます。<a href="http://www.tinybeans.net/blog/download/wp-plugin/cfg-utility-3.html">「Custom Field GUI Utility」</a>の作者は<a href="http://www.tinybeans.net/blog/">Tomohiro Okuwaki氏（Web屋かたつむりくん）</a>。
Author: Tsuyoshi.
Version: 0.0.1beta
Author URI: http://webcake.no003.info/
License: MIT License
*/

/*
rc:Custom Field GUI Utility Extender
Licensed under the MIT License
Copyright (c)  2012 Tsuyoshi.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
class CfgExtender
{
	/** プラグイン名称 */
	const PLUGIN_NAME = 'Custom Field GUI Utility Extender';
	
	/** 編集ファイルパス */
	private $_filepath;
	
	/** 編集プラグインパス */
	private $_pluginpath;
	
	/**
	 *	コンストラクタ
	 */
	public function __construct() {
		$this->_pluginpath = WP_PLUGIN_DIR . '/custom-field-gui-utility';
		$this->_filepath = $this->_pluginpath . '/conf.ini';
		
		add_action( 'admin_menu', array( $this, 'plugin_menu' ) );
	}

	/**
	 *	プラグインメニュー
	 */
	public function plugin_menu() {
		add_options_page(
			self::PLUGIN_NAME , 						//サブメニューページのタイトル
			'カスタムフィールド設定', 							//プルダウンに表示されるメニュー名
			'manage_options', 							//サブメニューの権限権限名
			basename( __FILE__ ), 						//サブメニューのスラッグ
			array( $this, 'plugin_page' )				//サブメニューページのコールバック関数
		);
	}

	/**
	 *	プラグインページ
	 */
	public function plugin_page() {
		$contents = '';
		
		//エラーチェック
		if ( $this->error_check() === false) {
			return;
		}
		
		//編集実行
		if( isset( $_POST['submit'] ) && ! empty( $_POST['txtconf'] ) ) {
			//ファイル上書き
			if( file_put_contents( $this->_filepath, $_POST['txtconf'] , LOCK_EX ) ) {
				echo '<div id="message" class="updated fade"><p><strong>更新しました。</strong></p></div>';
			}else {
				$this->view_errors( '更新に失敗しました' );
			}
		}
		
		//iniファイルパースエラー警告出力
		if( @parse_ini_file( $this->_filepath ) === false ) {
			$this->view_errors( 'iniファイルのパースエラーです <strong>半角 ( ) </strong>などの記号入っていないか、また正しいフォーマットか確認して下さい。</p>' );
		}
	
		//ファイルが存在すれば読み込み
		if( file_exists( $this->_filepath ) ) {
			
			$contents = file_get_contents( $this->_filepath );
			
			//バックスラッシュでクォートされた文字列を元に戻す
			//(magic_quotes_gpcはOffだけれどWPが勝手にしている？)
			$contents = stripslashes( $contents );
		}
		
		//View表示
		$this->view_content( $contents );
	}
	
	/**
	 *	View表示
	 */
	private function view_content( $contents ) {
		echo '<div class="wrap">
				<div id="icon-plugins" class="icon32"><br/></div>
				<h2>' . self::PLUGIN_NAME . '</h2>
				<form action="" method="post">
					<p><textarea name="txtconf" rows="30" cols="120">' . $contents  . '</textarea></p>'
						. get_submit_button() .
			'	</form>';
			  '</div>';
	}
	
	/**
	 *	エラーチェック
	 */
	private function error_check() {
		//プラグイン存在チェック
		if( ! file_exists( $this->_pluginpath ) ) {
			$this->view_errors( 'プラグイン <strong>' . $this->_pluginpath . '</strong> が存在しません</p>' );
			return false;
		}
	
		//ファイル存在チェック
		if( ! file_exists( $this->_filepath ) ) {
			$this->view_errors( 'ファイル <strong>' . $this->_filepath . '</strong> が存在しません</p>' );
			return false;
		}
		
		return true;
	}
	
	/**
	 *	エラー表示
	 */
	private function view_errors( $message ) {
		echo '<div class="error">
				<p>' . $message .'</p>
			  </div>';
	}
}

//管理者ページでのみ実行
if( is_admin() ) {
	//インスタンス生成
	$CfgExtender = new CfgExtender();
}